#include "gpio.h"
#include "LED.h"
#include <stdlib.h> 
#include "delay.h"
void turnup_single_led(int led_number)
{  switch (led_number)
{
case 1:
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);//LED1
    break;
case 2:
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//LED2
    break;
case 3:
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);//LED3
    break;
case 4:
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);//LED4
    break;
case 5:
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET); //LED5
    break;
case 6:
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);//LED6
    break;
case 7:
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);//LED7
    break;
case 8:
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);//LED8
    break;    

}
}



void turnup_ALL_led(void)
{  
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);//LED1
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//LED2
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);//LED3
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);//LED4
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET); //LED5
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);//LED6
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);//LED7
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);//LED8
}


void turndown_single_led(int led_number)
{
    switch (led_number)
    {
    case 1:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // LED1
        break;
    case 2:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); // LED2
        break;
    case 3:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET); // LED3
        break;
    case 4:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); // LED4
        break;
    case 5:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET); // LED5
        break;
    case 6:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET); // LED6
        break;
    case 7:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET); // LED7
        break;
    case 8:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET); // LED8
        break;
    }
}

void turndown_ALL_led(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // LED1
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); // LED2
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET); // LED3
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET); // LED4
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET); // LED5
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET); // LED6
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET); // LED7
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET); // LED8
}



void lightUp_one_by_one()
{
   for (int i = 0; i < 8; i++)
   {
       turnup_single_led(i + 1);
       delay_ms(500);
       turndown_single_led(i + 1);
   }
}

void lightup_all_leds()
{
   for (int i = 0; i < 8; i += 2)
   {
       turnup_single_led(i + 1);
       HAL_Delay(500);
   }
}

void breath_leds()
{
   for (int i = 0; i < 8; i++)
   {
       turnup_single_led(i + 1);
       HAL_Delay(200);
   }
   for (int i = 7; i >= 0; i--)
   {
       turndown_single_led(i + 1);
       HAL_Delay(200);
   }
}

void flash_leds()
{
  for (int i=0;i<8;i++)
{
turnup_single_led(i+1);
}
HAL_Delay(500);
  for (int i=0;i<8;i++)
{
turndown_single_led(i + 1);
}
HAL_Delay(500);
}

void alternate_flash_leds()
{
   for (int i = 0; i < 8; i+=2)
   {
       turnup_single_led(i + 1);
   }
   HAL_Delay(500);
   for (int i = 0; i <8; i+=2)
   {
       turndown_single_led(i + 1);
   }
   HAL_Delay(500);
   for (int i = 1; i <8; i+=2)
    {
       turnup_single_led(i + 1);
    }
	HAL_Delay(500);
    for (int i = 1; i <8; i+=2)
    {
       turndown_single_led(i + 1);
    }
	HAL_Delay(500);
}

void double_alternate_flash_leds()
{
	for (int i=0;i<8;i+=2)
	{
	turnup_single_led(i + 1);
	turnup_single_led(i + 2);
	HAL_Delay(500);
	turndown_single_led(i + 1);
	turndown_single_led(i + 2);
	}
}

void all_flash_then_sequential_turnoff()
{
   for (int i=0;i<8;i++) 
    {
    turnup_single_led(i + 1);
    }
    HAL_Delay(500);
    for (int i=0;i<8;i++) 
    {
    turndown_single_led(i + 1);
        HAL_Delay(500);
    }
}

void wave_blink_all_LEDs()
{
   for (int i = 0; i < 8; i++)
   {
       turnup_ALL_led();
       HAL_Delay(200);
       turndown_ALL_led();
       HAL_Delay(200);
   }
}

void random_blink_all_LEDs()
{
   for (int i = 0; i < 8; i++)
   {
       turnup_ALL_led();
       HAL_Delay(500);
       turndown_ALL_led();
       HAL_Delay(500);
   }
}
